﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Gustozzi.DAL;
namespace Gustozzi.BL
{
    public class DocumentoTributarioBL
    {
        public const string cDocTributario_Pendiente = "1";
        public const string cDocTributario_Anulado = "2";

        public int ActualizarDocumentoTributario(DocumentoTributario oDocumento, List<ItemPedido> listadoDetalle, VentasDataEntities contexto)
        {
            if (contexto == null)
            {
                contexto = new VentasDataEntities();
            }
            int idDoc = 0;

            var listaDocs = from p in contexto.DocumentosTributario
                            select p.codigoDocTrib;
            if (listaDocs.Count() > 0)
            {
                idDoc = listaDocs.Max();
                idDoc++;
            }
            else
            {
                idDoc = 1;
            }
            oDocumento.codigoDocTrib = idDoc;

            int idDetalle = 1;
            foreach (var item in listadoDetalle)
            {
                var listaDetalle = from p in contexto.DocumentoTributarioDetalles
                                   where p.codigoDocTrib == oDocumento.codigoDocTrib
                                   select p.codigoDocTribDet;

                if (listaDetalle.Count() > 0)
                {
                    idDetalle = listaDetalle.Max();
                    idDetalle++;
                }
                else 
                {
                    idDetalle++;
                }

                DocumentoTributarioItem oItemDoc = new DocumentoTributarioItem();
                oItemDoc.codigoDocTribDet = idDetalle;
                oItemDoc.cantidad = item.cantidad;
                oItemDoc.codigoDocTrib = oDocumento.codigoDocTrib;
                if (item.codigoProducto != 0)
                {
                    oItemDoc.codigoProducto = item.codigoProducto;
                }

                oItemDoc.importe = item.importe;
                oItemDoc.precioUnitario = item.precioUnitario;
                contexto.AddToDocumentoTributarioDetalles(oItemDoc);
            }

            return contexto.SaveChanges();
        }
        public int AnularDocumentoTributario(int idDocumento) 
        {
            VentasDataEntities contexto = new VentasDataEntities();
            var listadoDocs = from p in contexto.DocumentosTributario
                       where p.codigoDocTrib ==idDocumento 
                       select p;
            if (listadoDocs.Count() > 0)
            {
                DocumentoTributario oDoc = listadoDocs.First();
                if (oDoc.estado == cDocTributario_Anulado) 
                {
                    throw new Exception("No se puede anular un documento ya anulado");
                }
                oDoc.estado = cDocTributario_Anulado;

                return contexto.SaveChanges();
            }
            else 
            {
                throw new Exception("Documento no existe");
            }
        }
    }
}
